package interfaces;
import laberinto.Casilla;
import utilidades.Vector;

public interface IFantasma extends IObjetoComible,IObservador{
	
	/**
	 * método necesario solo para ser utilizado por el objeto de tipo IEstado
	 * (la visibilidad public es muy permisiva y las otras muy restrictivas)
	 */
	public void cambiarEstado(IEstado nuevoEstado);	
	public float obtenerAlcanceDeVision();
	public boolean moverseYAvisarSiHuboBifurcacion(Vector moviendoseHacia);

	public Vector obtenerDireccionSiEstaDentroDelRangoDeVision(IPacman pacman);
	public Vector obtenerDireccionAlAzar(Vector direccionAEvitar);
	
	public void mover(IPacman pacman);	
	
	public void convertirEnPresa();

	public void vivir(IPacman pacman);

	public Casilla obtenerCasilla();
	
	public Vector obtenerPosicion();
	public void volverACasillaInicial();
	public String obtenerPersonalidad();
	public String obtenerEstado();
	public String obtenerSentido();
	
	public void establecerCasilla(Casilla casillaInicial);
	public abstract String obtenerEstrategia();
	
	public void desaparecerFantasmaMuerto();
	public Vector obtenerDireccion();
	public String obtenerColor();
	
	// necesario solo para la parte grafica
	public boolean estaMuerto();
	public boolean esPresa();
	public void cambiarCasillaOriginalPor(Casilla obtenerCasillaInicialFantasmas);

	public Vector obtenerUltimaDireccion();
}
